﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Emporium_Web.Controls;
using System.Web.UI.WebControls;
using Emporium_Web.DBML;

namespace Emporium_Web
{
    public partial class OrdenCortePaqueteAdd : System.Web.UI.UserControl
    {
        public event EventHandler Seleccionado;

        protected virtual void OnSeleccionado(EventArgs e)
        {
            if (Seleccionado != null)
                Seleccionado(this, e);
        }



        public string SortExpression
        {
            get
            {
                return ViewState["gv_SortExpression"] == null ? "" : ViewState["gv_SortExpression"].ToString();
            }
            set
            {
                ViewState["gv_SortExpression"] = value;
            }
        }

        public string SortDirection
        {
            get
            {
                return ViewState["gv_SortDirection"] == null ? "" : ViewState["gv_SortDirection"].ToString();
            }
            set
            {
                ViewState["gv_SortDirection"] = value;
            }
        }

        public int CodigoOrdenCorte
        {
            get
            {
                return ViewState["CodigoSeleccionado"] == null ? 0 : Convert.ToInt32(ViewState["CodigoSeleccionado"]);
            }
            set
            {
                ViewState["CodigoSeleccionado"] = value;              
            }
        }

        public int NumeroPaquete
        {
            get
            {
                return ViewState["NumeroPaquete"] == null ? 0 : Convert.ToInt32(ViewState["NumeroPaquete"]);
            }
            set
            {
                ViewState["NumeroPaquete"] = value;
            }
        }

        public string DescripcionSeleccionado
        {
            get
            {
                return ViewState["DescripcionSeleccionado"] == null ? string.Empty : ViewState["DescripcionSeleccionado"].ToString();
            }
            set
            {
                ViewState["DescripcionSeleccionado"] = value;                
            }
        }

        public int OrdenProduccionID
        {
            get
            {
                return ViewState["OrdenProduccionID"] == null ? -1 : Convert.ToInt32(ViewState["OrdenProduccionID"]);
            }
            set
            {
                ViewState["OrdenProduccionID"] = value;
            }
        }

        public int SectorID
        {
            get
            {
                return ViewState["SectorID"] == null ? -1 : Convert.ToInt32(ViewState["SectorID"]);
            }
            set
            {
                ViewState["SectorID"] = value;
            }
        }


        public int ProcesoID
        {
            get
            {
                return ViewState["ProcesoID"] == null ? -1 : Convert.ToInt32(ViewState["ProcesoID"]);
            }
            set
            {
                ViewState["ProcesoID"] = value;
            }
        }

        public int ActividadID
        {
            get
            {
                return ViewState["ActividadID"] == null ? -1 : Convert.ToInt32(ViewState["ActividadID"]);
            }
            set
            {
                ViewState["ActividadID"] = value;
            }
        }


        public int LineaID
        {
            get
            {
                return ViewState["LineaID"] == null ? -1 : Convert.ToInt32(ViewState["LineaID"]);
            }
            set
            {
                ViewState["LineaID"] = value;
            }
        }

        public int ProcesoDestinoID
        {
            get
            {
                return ViewState["ProcesoDestinoID"] == null ? -1 : Convert.ToInt32(ViewState["ProcesoDestinoID"]);
            }
            set
            {
                ViewState["ProcesoDestinoID"] = value;
            }
        }

        public int ActividadDestinoID
        {
            get
            {
                return ViewState["ActividadDestinoID"] == null ? -1 : Convert.ToInt32(ViewState["ActividadDestinoID"]);
            }
            set
            {
                ViewState["ActividadDestinoID"] = value;
            }
        }

        [Serializable]
        private class OrdenCortePaquete
        {
            public int ResumenID { get; set; }
            public int CodigoOrdenCorte { get; set; }
            public int NumeroPaquete { get; set; }
            public int EtiquetaID { get; set; }
            public string Etiqueta { get; set; }
            public int TallaID { get; set; }
            public string Talla { get; set; }
            public int Prendas { get; set; }
        }


        /// <summary>
        /// Los componentes.
        /// </summary>
        private List<OrdenCortePaquete> OrdenCortePaqueteList
        {
            get
            {
                return ViewState["OrdenCortePaqueteList"] == null ? null : (List<OrdenCortePaquete>)ViewState["OrdenCortePaqueteList"];
            }
            set
            {
                ViewState["OrdenCortePaqueteList"] = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {            
            errorMessage.Visible = false;
            OrdenCortePaqueteList = new List<OrdenCortePaquete>();
        }

        public void Mostrar()
        {            
            mpeBusquedaOrdenCortePaquete.Show();
        }

       

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < gvOrdenCortePaquetes.Rows.Count; i++)
            {
                if ((int)gvOrdenCortePaquetes.DataKeys[i][0] == Convert.ToInt32(hdnSeleccion.Value))
                {
                    CodigoOrdenCorte = (int)gvOrdenCortePaquetes.DataKeys[i][1];
                    NumeroPaquete = (int)gvOrdenCortePaquetes.DataKeys[i][2];                    
                    OnSeleccionado(e);
                    return;
                }
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                ListarOrdenCortePaquetes();
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }



        protected void gvPagerPageChanged(object sender, DataNavigatorEventArgs e)
        {
            try
            {
                ListarOrdenCortePaquetes();
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        protected void gvOrdenCortePaquetes_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
               
            }
        }

        protected void gvOrdenCortePaquetes_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (gvOrdenCortePaquetes.HeaderRow == null)
                {
                    return;
                }

                this.SortExpression = e.CommandArgument != null ? e.CommandArgument.ToString() : "Id";
                this.SortDirection = e.CommandName.Equals("SortUp") ? "ASC" : "DES";

                ListarOrdenCortePaquetes();

            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }       

        public void ListarOrdenCortePaquetes()
        {
            TablasDataContext database = new TablasDataContext();
            int? OrdenCorte = null;

            if(!String.IsNullOrEmpty(txtOrdenCorte.Text))
            {
                OrdenCorte = Convert.ToInt32(txtOrdenCorte.Text);
            }

            var listarQuery = from paquete in database.PR_ResumenPaquetes
                              where (paquete.OrdCor_Id == OrdenCorte || OrdenCorte == null)
                              && (paquete.OrdPro_Id == this.OrdenProduccionID || this.OrdenProduccionID <= 0)
                              && (paquete.Sector_Ori_Id == this.SectorID || this.SectorID <= 0)
                              && (paquete.Proceso_Ori_Id == this.ProcesoID || this.ProcesoID <= 0)
                              && (paquete.Actividad_Ori_Id == this.ActividadID || this.ActividadID <= 0)
                              && (paquete.Linea_Ori_Id == this.LineaID || this.LineaID <= 0)
                              && (paquete.Proceso_Des_Id == this.ProcesoDestinoID || this.ProcesoID <= 0)
                              && (paquete.Actividad_Des_Id == this.ActividadDestinoID || this.ActividadID <= 0)
                              && (paquete.Movimiento_Id == null)
                              select paquete;            

            foreach (var item in listarQuery)
            {
                var paquete = database.PR_OrdenCortePaquete.FirstOrDefault(c => c.OrdCor_Id == item.OrdCor_Id && c.OrdCorPaq_Numero == item.OrdCorPaq_Numero);

                if (!OrdenCortePaqueteList.Exists(c => c.CodigoOrdenCorte == item.OrdCor_Id && c.NumeroPaquete == item.OrdCorPaq_Numero))
                {
                    OrdenCortePaqueteList.Add(new OrdenCortePaquete()
                    {
                        ResumenID = item.Resumen_Id,
                        CodigoOrdenCorte = item.OrdCor_Id,
                        NumeroPaquete = item.OrdCorPaq_Numero,
                        Etiqueta = paquete.PR_OrdenCorte.OrdCor_Combinacion,
                        EtiquetaID = paquete.PR_OrdenCorte.OrdCor_Combinacion_Id,
                        Talla = paquete.OrdCorPaq_Talla,
                        TallaID = paquete.Talla_Id,
                        Prendas = Convert.ToInt32(paquete.OrdCorPaq_Prendas)
                    });
                }
            }

            var listarQuery1 = OrdenCortePaqueteList.Skip((gvPager.CurrentPage - 1) * gvPager.PageSize).Take(gvPager.PageSize).ToList();

            gvOrdenCortePaquetes.DataSource = listarQuery1;
            gvOrdenCortePaquetes.DataBind();

            int totalReg = OrdenCortePaqueteList.Count();

            if (totalReg > 0)
            {
                gvOrdenCortePaquetes.UseAccessibleHeader = false;
                gvOrdenCortePaquetes.HeaderRow.TableSection = TableRowSection.TableHeader;
                gvPager.Visible = true;
                gvPager.TotalRowCount = totalReg;                
            }
            else
            {                
                gvPager.Visible = false;
            }

            lblMensajeGridFooter.Text = String.Format(Resources.MensajesValidacion.GridFooterMessage, totalReg);
            
            mpeBusquedaOrdenCortePaquete.Show();
        }       


        protected void btnMostrarModal_Click(object sender, EventArgs e)
        {
            ListarOrdenCortePaquetes();            
        }
       
    }
}